package chai.ningning.buffer;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * 1、BufferedInputStream 为另一个输入流添加一些功能，即缓冲输入以及支持 mark 和 reset 方法的能力
 */

/**
 * 1、java.io.BufferedInputStream 类是 java.io.InputStream 类的子类
 * 2、凡是带有缓冲功能的输入流 都支持 markSuppoerted /mark/rese 操作，比如 BufferedInputStream
 * 3、BufferedInputStream 类中声明了 byte[] buf/ int pos/int markpos /int count
 */
public class BufferedInputStreamTest {

    public static void main(String[] args) throws Exception {

        String pathname = "D:/IdeaProjects/java-advanced/files-and-streams-1/src/chai/ningning/buffer/BufferedInputStreamTest.java";
        FileInputStream fis = new FileInputStream(pathname);
        System.out.println("FileInputStream :" + fis);
        System.out.println("FileInputStream :" + fis.markSupported());  //false
        // public boolean markSupported() ;   返回 一个 boolean 值，指示此流类型是否支持 mark 和 reset 方法。

        //BufferedInputStream 的构造方法接受的参数是 java.io.InputStream；
        BufferedInputStream bis = new BufferedInputStream(fis);
        System.out.println("BufferedInputStream :" + bis);
        System.out.println("BufferedInputStream :" + bis.markSupported());  //true

        int b ;
        while ((b=bis.read()) > 0 ){
            char ch = (char) b ;
            System.out.print( ch );
            if( ch == 'A'){
                bis.mark( -1 ); //做个标记 markpos = pos ;
            }
        }
        System.out.println("---------------------------------------------------------");
        bis.reset(); // 返回到最后一次做的标记位置 pos = markpos ;

        while ((b=bis.read()) > 0){
            char ch = (char)b;
            System.out.print( ch );
        }

        bis.close();
        fis.close();
    }
}
